home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #288 (1993)(Rhein-Sieg-Soft).zip / Franz PD Disk #288 (1993)(Rhein-Sieg-Soft).adf / Knobeln / GEISTERSTUNDE.LST < prev    next >
File List  |  1992-10-29  |  12KB  |  416 lines

  1. '  ******************************
  2. '  *    Geisterstunde V1.01     *
  3. '  *    (The Witching Hour)     *
  4. '  *    © 1992 by Henry König   *
  5. '  * Bornheide 71, 2 Hamburg 53 *
  6. '  ******************************
  7. init.spiel                      ! Variablen zuweisen, Spielfeld zeichnen
  8. spielen                         ! und spielen
  9. PROCEDURE anweisung.aus         ! Anweisungen ausblenden
  10.   PRINT AT(1,23);SPACE$(30);
  11.   PRINT AT(1,25);SPACE$(30);
  12. RETURN
  13. PROCEDURE beenden               ! Spiel beenden
  14.   anweisung.aus                 ! letzte Anweisung löschen
  15.   LOCATE 1,23                   ! Cursor plazieren
  16.   IF spieler=1 THEN             ! Spieler = 1
  17.     PRINT "Die Hexen gewinnen"; ! ja, der Spieler gewinnt
  18.   ELSE                          ! Spieler 0 -1
  19.     PRINT "Die Geister gewinnen"! Computer gewinnt
  20.   ENDIF
  21.   PRINT AT(1,25);"Noch ein Spiel? (j/n) ";
  22.   taste                         !  auf Taste warten
  23.   IF UPPER$(x$)="J" THEN
  24.     RUN                         ! ja, dann Neustart
  25.   ELSE
  26.     CLOSEW #2                   ! Fenster schließen
  27.     CLOSES 2                    ! Bildschirm schließen
  28.     END                         ! zurück zur Workbench
  29.   ENDIF
  30. RETURN
  31. PROCEDURE bildschirm            ! Bildschirm und Fenster öffnen
  32.   breite%=320                   ! Fensterbreite
  33.   hoehe%=256                    ! Fensterhöhe
  34.   ebenen%=3                     ! Anzahl der Bitplanes
  35.   OPENS 1,0,0,breite%,hoehe%,ebenen%,&H0
  36.   OPENW #1,0,0,breite%,hoehe%,&H18,&H1800,1
  37.   TITLEW #1,"Geisterstunde"
  38.   farben.setzen                 ! Farbpalette setzen
  39. RETURN
  40. PROCEDURE computer.zieht        ! Computer zieht für sich oder Spieler
  41.   RANDOMIZE TIMER               ! Zufallsgenerator einschalten
  42.   CLR h
  43.   CLR k
  44.   FOR a=7 TO 35
  45.     sechs
  46.   NEXT a
  47.   dreio:
  48.   leave
  49.   IF h<0 THEN
  50.     quarterc
  51.   ELSE
  52.     CLR h
  53.     CLR k
  54.     a=t
  55.     sechs
  56.     IF h<1 THEN
  57.       quarterc
  58.     ELSE
  59.       GOTO dreio
  60.     ENDIF
  61.   ENDIF
  62. RETURN
  63. PROCEDURE farben.setzen         ! Farbfestlegung
  64.   SETCOLOR 0,5,5,5              ! grau statt blau
  65.   SETCOLOR 1,15,15,15           ! weiß bleibt
  66.   SETCOLOR 2,0,0,0              ! schwarz erhalten
  67.   SETCOLOR 3,15,5,0             ! rot bleibt
  68.   SETCOLOR 4,10,10,10           ! hellgrau inverse Farbe im Filerequester
  69.   SETCOLOR 5,15,15,0            ! gelb
  70.   SETCOLOR 6,0,0,0              ! schwarz = Inverse Farbe im Filerequester
  71.   SETCOLOR 7,15,12,10           ! orange
  72. RETURN
  73. PROCEDURE figur.plazieren       ! Figur neu setzen
  74.   IF b(a)<>2 THEN
  75.     IF b(a)<0 THEN              ! Hexe anzeigen
  76.       PUT x(a),y(a),hexe$
  77.     ENDIF
  78.     IF b(a)=0 THEN              ! Figur ausblenden
  79.       PUT x(a),y(a),feld$
  80.     ENDIF
  81.     IF b(a)>0 THEN              ! Geist anzeigen
  82.       PUT x(a),y(a),geist$
  83.     ENDIF
  84.     LOCATE xl(a),yl(a)          ! Position der Feldbezeichnungen
  85.     PCOLOR 7
  86.     PRINT CHR$(l(a))            ! Feldbezeichnung ausgeben
  87.     PCOLOR 1
  88.   ENDIF
  89. RETURN
  90. PROCEDURE init.spiel            ! Variablenzuweisung, Spielfeld zeichnen
  91.   bildschirm                    ! Bildschirm öffnen
  92.   DIM d(28),x(35),y(35)
  93.   DIM l(35),xl(35),yl(35),n(28),b(42)
  94.   DIM m(10)
  95.   COLOR 1
  96.   BOX 50,80,81,103              ! Box zeichnen
  97.   GET 50,80,81,103,feld$        ! leeres Feld zum Ausblenden merken
  98.   BOX 230,80,261,103            ! Box für den Geist zeichnen
  99.   PRINT AT(14,12);"Geisterstunde"
  100.   zeichne.figur                 ! Hexe und Geist zeichnen
  101.   spieler=-1                    ! Hexen (Spieler) fangen an
  102.   FOR a=0 TO 7
  103.     READ m(a)
  104.   NEXT a
  105.   FOR a=0 TO 28
  106.     READ d(a)
  107.   NEXT a
  108.   b=48                          ! 1. linker Rahmen der Spielfiguren
  109.   c=32
  110.   d=59
  111.   e=12                          ! Rahmenhöhe
  112.   FOR a=0 TO 4
  113.     FOR f=0 TO 4
  114.       h=6*a+f+7
  115.       x(h)=b*f+d-15             ! Positionen der Figuren
  116.       y(h)=c*a+e+5
  117.       l(h)=g+97
  118.       n(g)=h
  119.       g=g+1
  120.       xl(h)=6*f+10              ! Rechtswert der Feldbezeichnungen
  121.       yl(h)=4*a+3               ! Hochwert der Feldbezeichnungen
  122.     NEXT f
  123.   NEXT a
  124.   CLS                           ! Bildschirm löschen
  125.   COLOR 3                       !
  126.   FOR a=0 TO 4                  ! waagerechte und senkrechte Verbindung zeichnen
  127.     LINE d,c*a+e+16,b*4+d,c*a+e+16
  128.     LINE b*a+d,e+16,b*a+d,c*4+e+16
  129.   NEXT a
  130.   CLR a
  131.   CLR f
  132.   zeichne.linie                 ! Schräglinien zeichnen
  133.   a=b+b
  134.   zeichne.linie
  135.   f=c+c
  136.   zeichne.linie
  137.   CLR a
  138.   zeichne.linie
  139.   FOR a=0 TO 42
  140.     READ b(a)
  141.     figur.plazieren             ! Figuren aufs Spielfeld setzen
  142.   NEXT a
  143. RETURN
  144. PROCEDURE leave                 ! Figur auf Spielfeld setzen
  145.   b(t)=b(f)
  146.   b(f)=0
  147.   a=f
  148.   figur.plazieren               ! Figur auf Spielfeld setzen
  149.   IF k THEN
  150.     b(k)=0
  151.     a=k
  152.     figur.plazieren             ! Figur auf Spielfeld setzen
  153.   ENDIF
  154.   a=t
  155.   figur.plazieren               ! Figur auf Spielfeld setzen
  156. RETURN
  157. PROCEDURE leave2
  158.   IF b(c+m(b))=0 THEN
  159.     sc=1+RND(1)*0.9
  160.     IF h<sc THEN
  161.       h=sc
  162.       f=a
  163.       t=c+m(b)
  164.       k=c
  165.     ENDIF
  166.     IF ck<>0 THEN
  167.       IF t1=c+m(b) THEN
  168.         l=1
  169.         k1=c
  170.         b=7
  171.       ENDIF
  172.     ENDIF
  173.   ENDIF
  174. RETURN
  175. PROCEDURE quarterc
  176.   spieler=-spieler              ! Spieler invertieren
  177.   CLR h
  178.   a=7
  179.   zweisixo:
  180.   IF a=36 THEN
  181.     beenden                     !  Spiel beenden
  182.   ENDIF
  183.   sechs
  184.   IF h=0 THEN
  185.     INC a
  186.     GOTO zweisixo
  187.   ENDIF
  188. RETURN
  189. PROCEDURE sechs
  190.   IF b(a)=0 OR b(a)=-spieler OR b(a)=2 THEN
  191.     GOTO sechs.ende
  192.   ENDIF
  193.   FOR b=0 TO d(a-7)
  194.     c=a+m(b)
  195.     IF b(c)=spieler OR b(c)=2 THEN
  196.       GOTO sechs.weiter
  197.     ENDIF
  198.     IF b(c) THEN
  199.       leave2
  200.       GOTO sechs.weiter
  201.     ENDIF
  202.     sc=RND(1)*0.9
  203.     IF h<sc THEN
  204.       h=sc
  205.       f=a
  206.       t=c
  207.     ENDIF
  208.     IF ck=1 AND t1=c THEN
  209.       l=1
  210.       b=7
  211.     ENDIF
  212.     sechs.weiter:
  213.   NEXT b
  214.   sechs.ende:
  215. RETURN
  216. PROCEDURE spielen               ! Spielprozedur
  217.   spielen1:
  218.   d=0                           ! Flag nur ein Zug
  219.   PCOLOR 5,0
  220.   PRINT AT(1,1);"Geisterstunde V1.00  © 1992 by H. König"
  221.   PCOLOR 1,0
  222.   LINE 1,10,639,10              ! rote Linie zeichen
  223.   LINE 1,172,639,172            ! rote Linie zeichen
  224.   LINE 1,210,639,210            ! rote Linie zeichen
  225.   LOCATE 1,23
  226.   IF spieler=1 THEN             !  Geister ziehen
  227.     PRINT "Geister ziehen"
  228.   ELSE                          !  Hexen ziehen (-1)
  229.     PRINT "Du ziehst die Hexe"
  230.   ENDIF
  231.   IF spieler=1 THEN             ! Geister sind dran
  232.     anweisung.aus               ! Anweisung ausblenden
  233.     PRINT AT(1,25);"Geister ziehen."
  234.     computer.zieht              ! Computer zieht
  235.     anweisung.aus               ! Anweisung ausblenden
  236.     GOTO spielen1               ! und weiterspielen
  237.   ELSE                          ! Hexen sind dran
  238.     PRINT AT(1,28);"Bei RETURN zieht der Computer für Dich."
  239.     PRINT AT(19,25);"nach Feld:";
  240.     PRINT AT(20,23);"von Feld:";
  241.     CLR x%                      ! Eingabe löschen
  242.     WHILE x%=0
  243.       e=e+1
  244.       taste                     ! ein Zeichen von der Tastatur holen
  245.       IF ASC(x$)=13 THEN        ! RETURN?
  246.         anweisung.aus           ! ja, dann Anweisung ausblenden
  247.         computer.zieht          ! Computer zieht
  248.         GOTO spielen1           ! und weiterspielen
  249.       ENDIF
  250.       IF x%<97 OR x%>121 THEN   ! Eingabe a-y?
  251.         CLR x%                  ! nein, dann Eingabe löschen
  252.       ENDIF
  253.     WEND
  254.     PRINT x$
  255.     a=n(x%-97)
  256.     z=a
  257.   ENDIF
  258.   waehle.zielfeld:              ! Spieler muß Zielfeld wählen
  259.   PRINT AT(19,25);"nach Feld:"; ! Anzeige
  260.   CLR x%                        ! Eingabe löschen
  261.   WHILE x%=0                    !
  262.     taste                       ! ein Zeichen von der Tastatur holen
  263.     IF x%<97 OR x%>121 THEN     ! Eingabe a-y?
  264.       CLR x%                    ! nein, dann Eingabe löschen
  265.     ENDIF
  266.   WEND
  267.   PRINT x$;
  268.   t1=n(x%-97)
  269.   ck=1
  270.   CLR l
  271.   CLR k1
  272.   sechs
  273.   ck=0
  274.   CLR h
  275.   a=7
  276.   IF a<36 THEN
  277.     dm2:
  278.     sechs
  279.     IF h<1 THEN
  280.       INC a
  281.       IF a<36 THEN
  282.         GOTO dm2
  283.       ENDIF
  284.     ENDIF
  285.   ENDIF
  286.   IF d THEN
  287.     GOTO fourseveno
  288.   ENDIF
  289.   IF l THEN
  290.     GOTO foureighto
  291.   ENDIF
  292.   tone:
  293.   PRINT CHR$(7);                ! Blitz bei falschen Zug
  294.   GOTO spielen1                 ! nächster Zug
  295.   fourseveno:
  296.   IF l=0 OR k1=0 THEN
  297.     PRINT CHR$(7);              ! Blitz bei falschen Zug
  298.     GOTO fiveone
  299.   ENDIF
  300.   foureighto:
  301.   IF k1=0 AND h>=1 THEN
  302.     GOTO tone
  303.   ENDIF
  304.   f=z
  305.   t=t1
  306.   k=k1
  307.   leave
  308.   IF k1=0 THEN
  309.     quarterc
  310.     GOTO spielen.ende
  311.   ENDIF
  312.   a=t
  313.   z=a
  314.   CLR h
  315.   sechs
  316.   IF h<1 THEN
  317.     quarterc
  318.     GOTO spielen.ende
  319.   ENDIF
  320.   fiveone:
  321.   anweisung.aus                 ! Anweisungen löschen
  322.   d=1                           ! Flag noch ein Zug möglich
  323.   GOTO waehle.zielfeld
  324.   spielen.ende:
  325.   GOTO spielen1                 ! nächsten Zug
  326. RETURN
  327. PROCEDURE taste                 ! auf Tastendruck warten
  328.   CLR x%                        ! Eingangswert für die Schleife
  329.   CLR mausk%                    ! Mausknopf löschen
  330.   CLR mausx%                    ! Maus (rechts) löschen
  331.   CLR mausy%                    ! Maus (hoch) löschen
  332.   WHILE x%=0
  333.     x$=INKEY$                   ! Taste abfragen
  334.     IF x$<>"" THEN              ! Taste gedrückt?
  335.       x%=ASC(x$)                ! ja, dann ASCII-Zeichen merken
  336.     ENDIF
  337.   WEND
  338. RETURN
  339. PROCEDURE zeichne.figur         ! Hexe und Geist zeichnen
  340.   FOR y=82 TO 101               ! Hochwerte
  341.     FOR x=58 TO 73              ! Rechtswerte
  342.       READ farbe                ! DATA lesen
  343.       IF farbe<>50 THEN         ! <>?
  344.         COLOR farbe             ! ja, dann Farbe einschalten
  345.         PLOT x,y                ! Punkt setzen
  346.       ENDIF
  347.     NEXT x
  348.   NEXT y
  349.   GET 50,80,81,103,hexe$        ! Hexe speichern
  350.   FOR y=82 TO 100               ! Hochwerte
  351.     FOR x=238 TO 251            ! Rechtswerte
  352.       READ farbe                ! DATA lesen
  353.       IF farbe<>50 THEN         ! <>
  354.         COLOR farbe             ! ja, dann Farbe einschalten
  355.         PLOT x,y                ! Punkt zeichnen
  356.       ENDIF
  357.     NEXT x
  358.   NEXT y
  359.   GET 230,80,261,103,geist$     ! Geist merken
  360. RETURN
  361. PROCEDURE zeichne.linie         ! Schräglinien zeichnen
  362.   LINE d+a,e+f+16,2*b+d+a,2*c+e+f+16
  363.   LINE d+a,2*c+e+f+16,2*b+d+a,e+f+16
  364. RETURN
  365. PROCEDURE daten
  366.   ' Daten der Hexe
  367.   DATA 50,50,02,50,50,50,50,50,50,50,50,50,50,50,50,50
  368.   DATA 50,02,02,02,50,50,50,50,50,50,50,50,50,50,50,50
  369.   DATA 50,02,02,02,02,02,50,50,50,50,50,50,50,50,50,50
  370.   DATA 02,50,02,02,02,02,02,02,02,02,50,50,50,50,50,50
  371.   DATA 50,50,02,02,05,05,05,05,05,50,02,02,02,50,50,50
  372.   DATA 50,02,50,07,07,07,05,05,05,05,50,50,50,50,50,50
  373.   DATA 02,50,07,50,07,07,02,02,05,05,50,50,50,50,50,50
  374.   DATA 50,50,50,50,07,50,02,02,02,02,02,02,50,50,50,50
  375.   DATA 50,50,50,07,50,50,02,02,00,02,02,02,02,50,50,50
  376.   DATA 50,50,07,07,02,02,02,02,00,02,02,02,02,50,50,50
  377.   DATA 50,50,07,07,02,02,02,02,00,02,02,02,02,50,50,50
  378.   DATA 50,50,50,50,02,02,02,02,00,02,02,02,50,50,50,50
  379.   DATA 50,50,50,50,50,00,00,00,02,02,02,02,50,50,50,50
  380.   DATA 50,50,50,50,50,02,02,00,02,02,00,02,50,50,50,50
  381.   DATA 50,50,50,50,50,02,02,00,02,02,00,02,02,50,50,50
  382.   DATA 50,50,50,50,50,00,00,00,00,00,00,02,02,02,50,50
  383.   DATA 50,50,50,50,50,50,00,00,00,00,00,00,00,00,50,50
  384.   DATA 50,50,50,50,50,50,00,00,00,00,00,00,00,00,00,50
  385.   DATA 50,50,50,50,50,50,05,05,50,00,00,00,00,00,00,00
  386.   DATA 50,50,50,50,50,05,05,05,50,50,05,05,05,50,50,50
  387.   ' Daten des Geistes
  388.   DATA 50,50,50,50,50,50,01,01,50,01,01,50,50,50
  389.   DATA 50,50,50,50,50,50,50,01,01,01,01,01,50,50
  390.   DATA 50,50,01,01,01,50,50,01,01,01,01,01,01,50
  391.   DATA 50,50,01,01,02,01,50,01,01,01,01,01,01,50
  392.   DATA 50,50,01,02,01,01,01,01,01,01,01,50,01,50
  393.   DATA 50,50,01,01,01,02,01,01,01,01,01,01,50,50
  394.   DATA 50,50,50,50,01,01,01,01,01,01,01,01,50,50
  395.   DATA 50,01,50,01,01,01,01,01,01,01,50,01,50,50
  396.   DATA 50,01,01,01,01,01,01,01,01,01,01,50,50,50
  397.   DATA 01,01,01,01,01,01,01,01,01,01,01,01,01,50
  398.   DATA 50,01,01,01,01,50,50,01,01,01,00,01,01,50
  399.   DATA 50,01,01,01,01,50,50,01,01,01,00,01,01,50
  400.   DATA 50,50,01,01,50,50,01,01,01,00,01,00,01,50
  401.   DATA 50,50,01,01,50,01,01,00,01,00,01,01,00,50
  402.   DATA 50,50,01,50,50,01,01,00,01,00,01,01,50,50
  403.   DATA 50,50,50,50,01,01,00,01,01,00,01,01,50,50
  404.   DATA 50,50,50,01,01,00,01,01,01,00,01,01,01,50
  405.   DATA 50,50,50,01,01,50,01,01,01,00,01,01,01,01
  406.   DATA 50,50,50,50,50,50,01,01,01,50,50,01,01,01
  407.   ' Kontroldaten
  408.   DATA -6,1,6,-1,-5,7,5,-7
  409.   DATA 7,3,7,3,7,0,3,7,3,7,3,0
  410.   DATA 7,3,7,3,7,0,3,7,3,7,3,0,7,3,7,3,7
  411.   DATA 2,2,2,2,2,2,2,-1,-1,-1,-1,-1,2
  412.   DATA -1,-1,-1,-1,-1,2,-1,-1,0,1,1,2
  413.   DATA 1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2
  414. RETURN
  415. REM
  416.